package com.zmn.oms.model.vo.redistribute;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.zmn.oms.model.entity.detail.OrderDetail;
import com.zmn.oms.model.entity.log.OrderRedistributeLog;
import com.zmn.oms.model.vo.work.detail.ZsOrderWorkDetailAbnormalVO;
import com.zmn.oms.model.vo.work.detail.ZsOrderWorkDetailComplaintVO;
import com.zmn.oms.model.vo.work.detail.ZsOrderWorkDetailProductVO;
import lombok.Data;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 类描述: 工单改派信息 视图类
 *
 * @author: liudi
 * @since: 2022/05/12 21:37
 */
@Data
@ToString
public class OrderWorkRedistributeInfoVO implements Serializable {

	/**
	 * 改派申请id
	 */
	@JsonSerialize(using = ToStringSerializer.class)
	private Long redistributeId;

	/**
	 * 订单id
	 */
	@JsonSerialize(using = ToStringSerializer.class)
	private Long orderId;

	/**
	 * 工单id
	 */
	@JsonSerialize(using = ToStringSerializer.class)
	private Long workId;

	/**
	 * 平台
	 **/
	private Integer plat;

	/**
	 * 子公司名称
	 */
	private String companyName;

	/**
	 * 订单类型：1 新单、2 返修单、3 退款单
	 */
	private Integer type;

	/**
	 * 工单状态 8 已创建 （暂时没用） 11 已下单 31 已确认 （平台确认） 34  已分单 41 已派单 51 已领单 61 已上门 71 已完成 81 已收单 91 已算账
	 */
	private Integer status;

	/**
	 * 工单状态 8 已创建 （暂时没用） 11 已下单 31 已确认 （平台确认） 34  已分单 41 已派单 51 已领单 61 已上门 71 已完成 81 已收单 91 已算账
	 */
	private String statusName;

	/**
	 * 结果状态：1 进行中、2 成功、3 失败、4 弃单
	 */
	private Integer resultStatus;

	/**
	 * 主工程师名称
	 */
	private Integer masterId;

	/**
	 * 主工程师名称
	 */
	private String masterName;

	/**
	 * 工程师产品分组
	 */
	private String masterGroupName;

	/**
	 * 加密后的工程师电话
	 */
	private String cryptoEngineerMobile;

	/**
	 * 主工程师电话 隐藏关键部分后的手机号
	 */
	private String masterPhone;

	/**
	 * 工程师主管id
	 */
	private Long masterSupervisorId;

	/**
	 * 工程师主管id
	 */
	private String masterSupervisorName;

	/**
	 * 客户姓名
	 */
	private String userName;

	/**
	 * 客户电话Map，key：第几个号码，value：手机号码
	 */
	private Map<String, String> telephoneMap;

	/**
	 * 加密后的客户电话Map，key：第几个号码，value：加密后的手机号码
	 */
	private Map<String, String> cryptoTelephoneMap;

	/**
	 * 客户电话1
	 */
	private String telephone;

	/**
	 * 客户电话2
	 */
	private String telephone2;

	/**
	 * 客户电话3
	 */
	private String telephone3;

	/**
	 * 渠道Id
	 */
	private Integer channelId;

	/**
	 * 渠道名称
	 */
	private String channelName;

	/**
	 * 省ID
	 */
	private Integer provinceId;

	/**
	 * 省份名称
	 */
	private String provinceName;

	/**
	 * 城市名称
	 */
	private Integer cityId;

	/**
	 * 城市名称
	 */
	private String cityName;

	/**
	 * 支付状态：1.未支付 2.支付中 3.部分支付 4.已支付 12.退款中 13.部分退款 14.已退款 15.退款失败 16.退款异常
	 */
	private Integer payStatus;

	/**
	 * 支付状态名称
	 */
	private String payStatusName;

	/**
	 * 最近一条备注
	 */
	private String lastRemark;

	/**
	 * 投诉
	 */
	private List<ZsOrderWorkDetailComplaintVO> complaintVOList;

	/**
	 * 改派缘由id
	 */
	private Integer reasonId;

	/**
	 * 责任归属：1：原工程师 2：当前工程师
	 */
	private Integer liableType;

	/**
	 * 改派缘由
	 */
	private String reason;

	/**
	 * 服务分类
	 */
	private Integer servCategId;


	/**
	 * 二级分类
	 */
	private Integer categId;

	/**
	 * 后台产品Id
	 */
	private Integer productId;

	/**
	 * 产品信息
	 */
	private String productInfo;

	/**
	 * 产品分组ID
	 */
	private Integer servProductGroupId;

	/**
	 * 产品分组名称
	 */
	private String servProductGroupName;

	/**
	 * 订单详情（主要是使用订单的地址）
	 */
	private OrderDetail orderDetail;

	/**
	 * 工单详情产品集合
	 */
	private List<ZsOrderWorkDetailProductVO> serviceItemList;

	/**
	 * 异常
	 */
	private List<ZsOrderWorkDetailAbnormalVO> abnormalVOList;

	/**
	 * 改派log集合
	 */
	private List<OrderRedistributeLog> logList;

	/**
	 * 区县ID
	 */
	private Integer countyId;

	/**
	 * 区县名称
	 */
	private String countyName;

	/**
	 * 街道ID
	 */
	private Integer streetId;

	/**
	 * 街道
	 */
	private String street;

	/**
	 * 客户地址具体门牌号
	 */
	private String address;

	/**
	 * 预约时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	private Date dutyTime;

	/**
	 * 下单时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	private Date receiveTime;

	/**
	 * 申请备注
	 */
	private String applyRemark;

	/**
	 * 附件文件urls，多个逗号分隔
	 */
	private String attachmentUrls;

	/**
	 * 申请图片urls，多个逗号分隔
	 */
	private String imageSrc;

	/**
	 * 视频
	 */
	private String videoSrc;

	/**
	 * 音频
	 */
	private String audioSrc;

	/**
	 * 审核状态
	 */
	private Integer auditStatus;

	/**
	 * 审核状态名称
	 */
	private String auditStatusName;

	/**
	 * 求助状态
	 */
	private Integer helpStatus;

	/**
	 * 求助状态名称
	 */
	private String helpStatusName;

	/**
	 * 改派状态
	 */
	private Integer redistributeStatus;

	/**
	 * 改派状态名称
	 */
	private String redistributeStatusName;

	/**
	 * 审核类型 0无 1主管审核 2员工审核
	 */
	private Integer auditType;

	/**
	 * 改派类型 1系统 2指定
	 */
	private Integer redistributeType;

	/**
	 * 虚假状态 1否 2是
	 */
	private Integer spuriousStatus;

	/**
	 * 审核预警 - 含义：5分钟内未进行审核操作
	 * 1否 2是
	 */
	private Integer auditWarningStatus;

	/**
	 * 审核超时 1否 2是
	 */
	private Integer auditTimeoutStatus;

	/**
	 * 转单求助超时 1否 2是
	 */
	private Integer helpTimeoutStatus;

	/**
	 * 申请人
	 */
	private String applyUser;

	/**
	 * 审核人id
	 */
	private Long auditerId;

	/**
	 * 审核人
	 */
	private String auditer;

	/**
	 * 审核人类型
	 */
	private Integer auditerType;

	/**
	 * 审核备注
	 */
	private String auditRemark;

	/**
	 * 改派次数
	 */
	private Integer distributeCount;

	/**
	 * 改约次数
	 */
	private Integer dutyTimeModifyCount;

	/**
	 * 改派工程师id
	 */
	private Integer redistributeMasterId;

	/**
	 * 改派工程师名称
	 */
	private String redistributeMasterName;

	/**
	 * 是否计入轮次：1. 不计入 2. 计入
	 */
	private Integer countEnable;

	/**
	 * 经度
	 */
	private Double longitude;

	/**
	 * 纬度
	 */
	private Double latitude;

	/**
	 * 创建人
	 */
	private String creater;

	/**
	 * 最新修改人
	 */
	private String updater;

	/**
	 * 创建时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	private Date createTime;

	/**
	 * 最新修改时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	private Date updateTime;
}
